home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj1186.arc / HILBERT.PRO < prev    next >
Text File  |  1986-09-19  |  1KB  |  53 lines

  1. predicates
  2.   turn(symbol)
  3.   opposite(symbol,symbol)
  4.   hilbert(symbol,integer,integer,integer)
  5.   two_to_the(integer,integer)
  6. clauses
  7.   turn(left)  :- !, left(90).
  8.   turn(right) :- !, right(90).
  9.   opposite(left,right).
  10.   opposite(right,left).
  11.   hilbert(_,Order,MaxOrder,_) :-
  12.     Order = MaxOrder,
  13.     !,
  14.     left(180).
  15.   hilbert(Sense,Order,MaxOrder,SegSize) :-
  16.     !,
  17.     NewOrder = Order + 1,
  18.     opposite(Sense,OppSense),
  19.     turn(Sense),
  20.     hilbert(OppSense,NewOrder,MaxOrder,SegSize),
  21.     turn(Sense),
  22.     forward(SegSize),
  23.     hilbert(Sense,NewOrder,MaxOrder,SegSize),
  24.     turn(OppSense),
  25.     forward(SegSize),
  26.     turn(OppSense),
  27.     hilbert(Sense,NewOrder,MaxOrder,SegSize),
  28.     forward(SegSize),
  29.     turn(Sense),
  30.     hilbert(OppSense,NewOrder,MaxOrder,SegSize),
  31.     turn(Sense).
  32.  
  33.   two_to_the(0,1).
  34.   two_to_the(Exponent,Result) :-
  35.     !,
  36.     N = Exponent-1,
  37.     two_to_the(N,R),
  38.     Result = R+R.
  39.  
  40. goal
  41.     write("Enter desired order (1-10):"),
  42.     readint(MaxOrder),
  43.     two_to_the(MaxOrder,N),
  44.     SegSize = 24000 / N,
  45.     clearwindow,
  46.     graphics(2,0,2),
  47.     penpos(30000,30000,180),
  48.     hilbert(left,0,MaxOrder,SegSize),
  49.     write("Press RETURN..."),
  50.     readln(_),
  51.     text.
  52.  
  53.